package Reflect;

import Reflect.zy.Test;

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Comparator;

/**
 * JUnit测试框架原型
 * 检查TestCase中的全部方法，如果标注了@Test则自动执行
 */
public class TestRunner {
    public static void main(String[] args) throws Exception{
        //找到Class类
        Class cls = Class.forName("Reflect.TestCase");
        //创建对象
        Object obj = cls.newInstance();
        //找到带有@Test注解的方法(默认顺序)
        //按照注解属性(order)排序，再执行
        Method[] methods = cls.getDeclaredMethods();
        Arrays.sort(methods, (method, t1) -> {
            Test a1 = method.getAnnotation(Test.class);
            Test a2 = t1.getAnnotation(Test.class);
            return a1.order()-a2.order();
        });
        for(Method ms : methods){
            if (ms.isAnnotationPresent(Test.class)){
                //执行方法
                ms.invoke(obj);
            }
        }
    }
}
